/**
 * Test du tampon partagé avec le problème des producteurs et du consommateurs.
 */

#include "tests.h"
#include "thread/tampon_partage.h"
#include "thread/thread.h"
#include <ctime>
#include <cmath>
#include <iostream>

typedef tampon_partage<int, 5> mon_tampon;

#define nbmess 7

class producteur : public thread_acteur {
	mon_tampon &tampon_;
public:
	producteur(mon_tampon &tampon) throw() : tampon_(tampon) {}
	void executer() {
		for(int i=0; i<nbmess; ++i) {
			int msg = rand() % 10;
			tampon_.deposer(msg);
			std::cout << "Dépôt de " << msg << std::endl;
		}
	}
};

class consommateur : public thread_acteur {
	mon_tampon &tampon_;
public:
	consommateur(mon_tampon &tampon) throw() : tampon_(tampon) {}
	void executer() {
		for(int i=0; i<nbmess; ++i) {
			int msg = tampon_.prelever();
			std::cout << "Prélèvement de " << msg << std::endl;
		}
	}
};

void producteur_consommateur() {
	srand(time(NULL));
	mon_tampon tampon_commun;
	producteur p(tampon_commun);
	consommateur c(tampon_commun);
	thread thrProducteur(p);
	thread thrConsommateur(c);
}
